/*
 * AC
 * DP
 * DFS
 **/
#include <stdio.h>

char rec[120][120][2];
int n, m;
int count;
void trave_pond(int x, int y);
int main(int argc, char **argv)
{
	char buffer[512];
	int i, j;

	while (fgets(buffer, sizeof buffer, stdin) != NULL) {
		count = 0;
		sscanf(buffer, "%d %d", &n, &m);
		if (n == 0 && m == 0)
			break;
		for (i = 0; i < n; i++) {
			fgets(buffer, sizeof buffer, stdin);
			for (j = 0; j < m; j++) {
				rec[i][j][0] = buffer[j];
				rec[i][j][1] = 0;
			}
		}
		for (i = 0; i < n; i++) {
			for (j = 0; j < m; j++) {
				if ((rec[i][j][0] == '@') && !rec[i][j][1]) {
					rec[i][j][1] = 1;
					count++;
					trave_pond(i, j);
				}
			}
		}
		printf("%d\n", count);
	}
	return 0;
}

void trave_pond(int x, int y)
{
	if (x < n - 1) {
		if (rec[x + 1][y][0] == '@') {
			if (!rec[x + 1][y][1]) {
				rec[x + 1][y][1] = 1;
				trave_pond(x + 1, y);
			}
		}
		if (y < m - 1) {
			if (rec[x + 1][y + 1][0] == '@') {
				if (!rec[x + 1][y + 1][1]) {
					rec[x + 1][y + 1][1] = 1;
					trave_pond(x + 1, y + 1);
				}
			}
			if (rec[x][y + 1][0] == '@') {
				if (!rec[x][y + 1][1]) {
					rec[x][y + 1][1] = 1;
					trave_pond(x, y + 1);
				}
			}
		}
		if (y > 0){
			if (rec[x + 1][y - 1][0] == '@') {
				if (!rec[x + 1][y - 1][1]) {
					rec[x + 1][y - 1][1] = 1;
					trave_pond(x + 1, y - 1);
				}
			}
			if (rec[x][y - 1][0] == '@') {
				if (!rec[x][y - 1][1]) {
					rec[x][y - 1][1] = 1;
					trave_pond(x, y - 1);
				}
			}
		}
	}
	if (x > 0) {
		if (rec[x - 1][y][0] == '@') {
			if (!rec[x - 1][y][1]) {
				rec[x - 1][y][1] = 1;
				trave_pond(x - 1, y);
			}
		}
		if (y < m - 1) {
			if (rec[x][y + 1][0] == '@') {
				if (!rec[x][y + 1][1]) {
					rec[x][y + 1][1] = 1;
					trave_pond(x, y + 1);
				}
			}
			if (rec[x - 1][y + 1][0] == '@') {
				if (!rec[x - 1][y + 1][1]) {
					rec[x - 1][y + 1][1] = 1;
					trave_pond(x - 1, y + 1);
				}
			}
		}
		if (y > 0) {
			if (rec[x][y - 1][0] == '@') {
				if (!rec[x][y - 1][1]) {
					rec[x][y - 1][1] = 1;
					trave_pond(x, y - 1);
				}
			}
			if (rec[x - 1][y - 1][0] == '@') {
				if (!rec[x - 1][y - 1][1]) {
					rec[x - 1][y - 1][1] = 1;
					trave_pond(x - 1, y - 1);
				}
			}
		}
	}
	if (x == n - 1 && x == 0) {
		if (y > 0) {
			if ((rec[x][y - 1][0] == '@') && !rec[x][y - 1][1]) {
				rec[x][y - 1][1] = 1;
				trave_pond(x, y - 1);
			}
		}
		if (y < m - 1) {
			if ((rec[x][y + 1][0] == '@') && !rec[x][y + 1][1]) {
				rec[x][y + 1][1] = 1;
				trave_pond(x, y + 1);
			}
		}
	}
}
